package com.mark.spring.annotation.life.cycle.init.destroy;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;

/**
 * @Description: Bean创建 -> 初始化 -> 销毁
 * @Author: Mark
 * @CreateDate: 2019/9/21 11:05
 * @Version: 3.00.001
 * @Copyright : 豆浆油条个人非正式工作室
 *
 * @see Bean#initMethod()
 *  * @see Bean#destroyMethod()
 *  *
 * 总结： @Bean(initMethod = "initMethod",destroyMethod = "destroyMethod")
 * 1.创建时调用构造方法
 * 2.初始化方法用initMethod属性指定
 * 3.销毁方法用destroyMethod属性指定
 * 4.多实例的Bean，只有在获取的时候才会创建，切多实例的Bean在IOC关闭时不会调用销毁方法
 */
@ComponentScan("com.mark.spring.annotation.life.cycle.init.destroy")
public class InitDestoryBootstrap {

    public static void main(String[] args) {
        //加载配置，获取bean
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(InitDestoryBootstrap.class);
        Movice bean = applicationContext.getBean(Movice.class);
        Movice bean2 = applicationContext.getBean(Movice.class);
        //关闭上下文
        applicationContext.close();

        /* 控制台打印的结果
         * Movice.....构造方法
         * Movice.....initMethod()
         * Movice.....destroyMethod()
         */

        //如果把Bean声明为多例，运行结果怎样呢？
        //多实例的Bean，只有在获取的时候才会创建，切多实例的Bean在IOC关闭时不会调用销毁方法
    }
}
